<?php

/**
 * Entité modèle : Table des rubriques
 * Représente l'ensemble des rubriques disponibles
 *
 * <b>Structure :</b>
 * <ul>
 *  <li>id</li>
 *  <li>controller</li>
 *  <li>action</li>
 *  <li>module</li>
 *  <li>titre</li>
 *  <li>active</li>
 *  <li>position</li>
 *  <li>parent_id</li>
 * </ul>
 *
 * @author Cyril Souti
 * @version 1.3
 * @package models
 *
 */
class Models_Content_Rubrique extends Models_TableGite
{
	protected $_name = 'content_rubrique';
	protected $_dependentTables = array(self::CLASS_NAME, Models_Content_Article::CLASS_NAME);
	protected $_referenceMap = array(self::REFERENCE_PARENT => array('columns' => 'parent_id','refTableClass' => self::CLASS_NAME,'refColumns' => 'id' ));

	const CLASS_NAME = 'Models_Content_Rubrique';
	const REFERENCE_PARENT = 'Parent';

	const SQL_CLAUSE_PARENT = 'parent_id = ?';
	const SQL_CLAUSE_NO_PARENT = 'parent_id IS NULL';
	const SQL_CLAUSE_ACTIVE = 'active = ?';
	const SQL_ORDER = 'position ASC';

	/**
	 * Retourne les rubriques racines actives
	 *
	 * @return array(Zend_Db_Table_Row) des rubriques
	 */
	public function getRubriquesRacinesActives()
	{
		$selectRubriquesRacine = $this->select()->where(self::SQL_CLAUSE_NO_PARENT)->where(self::SQL_CLAUSE_ACTIVE, true)->order(self::SQL_ORDER);
		$rubriquesRacine = $this->fetchAll($selectRubriquesRacine);
		return $rubriquesRacine;
	}

	/**
	 * Retourne les rubriques filles actives
	 * à partir de la rubrique donnée
	 *
	 * @param Zend_Db_Table_Row rubrique
	 * @return array(Zend_Db_Table_Row) des rubriques
	 */
	public function getRubriqueFilleActivesFromRubrique(Zend_Db_Table_Row $rubrique)
	{
		$selectActives = $this->select()->where(self::SQL_CLAUSE_ACTIVE, true)->order(self::SQL_ORDER);
		$rubriquesFilles = $rubrique->findDependentRowset(self::CLASS_NAME, self::REFERENCE_PARENT, $selectActives);
		return $rubriquesFilles;
	}

	/**
	 * Retourne les rubriques filles actives
	 * à partir de l'id de la rubrique donnée
	 *
	 * @param int $parent_id l'id d'une rubrique
	 * @return array(Zend_Db_Table_Row) des rubriques
	 */
	public function getRubriquesFillesActivesFromIdRubrique($idRubrique)
	{
		if (!is_null($idRubrique))
		{
			$selectRubriquesFilles = $this->select()->where(self::SQL_CLAUSE_PARENT, $idRubrique)->where(self::SQL_CLAUSE_ACTIVE, true)->order(self::SQL_ORDER);
			$rubriquesFilles = $this->fetchAll($selectRubriquesFilles);
			return $rubriquesFilles ;
		}
		else
		{
			return null;
		}
	}

	/**
	 * Retourne la rubrique correspondante
	 * au controller donné
	 *
	 * @param string $controller le nom du controller
	 * @return Zend_Db_Table_Row une rubrique
	 */
	public function getRubriqueFromController($controller)
	{
		$selectController = $this->select()->where('controller = ?', $controller);
		$rubrique = $this->fetchRow($selectController);
		return $rubrique;
	}
}